<html>
    <head>
        <title>如何组合Action完成业务</title>
    </head>
    <body>
        <script>
             /*
                        四、组合Action
                                            
                                    action 通常是异步的，那如何知道 action 什么时候结束呢？   

                                    更重要的是，我们如何才能组合多个 action ，以处理更加复杂的一部流程呢？

                                    首先，你要明白  store.dispatch 可以处理被触发的 action  的处理函数返回的 Promise，并且  store.dispatch  仍旧返回Promise:

                                            eg:
                                                actions:{
                                                    actionA({commit}){
                                                        return new Promise((resolve,reject)=>{
                                                            setTimeout(()=>{
                                                                commit('someMutation');
                                                                resolve()
                                                            },1000)
                                                        })
                                                    }
                                                }

                                    现在你可以在组件中使用：
                                            
                                                store.dispatch('actionA').then(()=>{
                                                    // ...
                                                })

                                    在另一个 action 中也可以这样(触发别的action):

                                                actions:{
                                                    // 。。。。
                                                    actionB({dispatch,commit}){
                                                        return dispatch('actionA').then(()=>{
                                                            commit('someOtherMutation')
                                                        })
                                                    }
                                                }


                                    最后，如果我们利用 async / await ，我们可以如下组合 action:

                                               // 假设  getData()  和 getOtherData()  返回的是 Promise

                                               actions:{
                                                   async actionA({commit}){
                                                       commit('gotData', await getData())
                                                   },

                                                   async actionB({dispathc,commit}){
                                                        await dispatch('actionA') // 等待 actionA 的完成
                                                        commit('gotOtherData',await getOtherData())
                                                   }
                                               }


                                    ★、 一个 store.dispatch 在不同模块中可以触发多个action 函数。在这种情况下，只有当所有触发函数完成后，返回的 Promise 才会执行。
                    */
        </script>
    </body>
</html>